/*
"万科易选房小程序"  "我的 - 积分商城"自动签到，支持 Quantumult X（理论上也支持 Surge、Loon，未尝试）。
请先使用 wanke_cookie.js 获取 Token。(https://gitee.com/jianglan/node-scripts/raw/master/checkin/wanke.js)
到 cron 设定时间自动签到时，若弹出"wanke分享家签到 - 签到结果：成功"，即代表签到完成，其他提示或无提示请发送日志信息至 issue。

️免责声明：
1. 此脚本仅用于学习研究，不保证其合法性、准确性、有效性，请根据情况自行判断，本人对此不承担任何保证责任。
2. 由于此脚本仅用于学习研究，您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除，若违反规定引起任何事件本人对此均不负责。
3. 请勿将此脚本用于任何商业或非法目的，若违反规定请自行对此负责。
4. 此脚本涉及应用与本人无关，本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
5. 本人对任何脚本引发的问题概不负责，包括但不限于由脚本错误引起的任何损失和损害。
6. 如果任何单位或个人认为此脚本可能涉嫌侵犯其权利，应及时通知并提供身份证明，所有权证明，我们将在收到认证文件确认后删除此脚本。
7. 所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本，即视为您已接受此免责声明。

Author：Julian

Quantumult X (App Store:1.0.5+, TestFlight 190+):
[task_local]
30 8 * * * wanke.js, tag=万科分享家签到
or remote
30 8 * * * https://gitee.com/jianglan/node-scripts/raw/master/checkin/wanke.js, tag=万科分享家签到

Surge 4.0+ & Loon:
[Script]
cron "30 8 * * *" script-path=https://gitee.com/jianglan/node-scripts/raw/master/checkin/wanke.js
*/

const cookieName = 'wanke分享家签到'
const signurlKey = 'julian_signurl_wanke'
const signheaderKey = 'julian_signheader_wanke'
const julian = init()
const signurlVal = julian.getdata(signurlKey)
const signheaderVal = julian.getdata(signheaderKey)
//积分签到
signWanke()

function signWanke() {
    julian.log(`signurlVal:${signurlVal}`)
    julian.log(`signheaderVal:${signheaderVal}`)
    const url = 
    { 
        url: signurlVal, 
        method: `GET`,
        headers: JSON.parse(signheaderVal)
    }

    julian.get(url, (error, response, data) => {
        julian.log(`${cookieName}, data: ${data}`)
        const res = JSON.parse(data)
        let subTitle = ''
        let detail = ''
        if (res.msg == '成功') {
            subTitle = '签到结果: 成功'
            const point = JSON.stringify(res.data.usablePoints)
            detail = `当前积分: ${point}`
        } 
        else {
            subTitle = '签到结果: 失败'
            detail = `状态: ${res.msg}`
        }
        julian.msg(cookieName, subTitle, detail)
        julian.done()
  })
}

function init() {
  isSurge = () => {
    return undefined === this.$httpClient ? false : true
  }
  isQuanX = () => {
    return undefined === this.$task ? false : true
  }
  getdata = (key) => {
    if (isSurge()) return $persistentStore.read(key)
    if (isQuanX()) return $prefs.valueForKey(key)
  }
  setdata = (key, val) => {
    if (isSurge()) return $persistentStore.write(key, val)
    if (isQuanX()) return $prefs.setValueForKey(key, val)
  }
  msg = (title, subtitle, body) => {
    if (isSurge()) $notification.post(title, subtitle, body)
    if (isQuanX()) $notify(title, subtitle, body)
  }
  log = (message) => console.log(message)
  get = (url, cb) => {
    if (isSurge()) {
      $httpClient.get(url, cb)
    }
    if (isQuanX()) {
      url.method = 'GET'
      $task.fetch(url).then((resp) => cb(null, resp, resp.body))
    }
  }
  post = (url, cb) => {
    if (isSurge()) {
      $httpClient.post(url, cb)
    }
    if (isQuanX()) {
      url.method = 'POST'
      $task.fetch(url).then((resp) => cb(null, resp, resp.body))
    }
  }
  done = (value = {}) => {
    $done(value)
  }
  return { isSurge, isQuanX, msg, log, getdata, setdata, get, post, done }
}